<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <!-- Vue生命周期和生命周期的四个阶段
   思考：什么时候可以发送初始化渲染请求？（越早越好）什么时候可以开始操作dom？（至少dom得渲染出来）
   Vue生命周期：一个Vue实例从创建到销毁的整个过程
   生命周期：1.创建 2.挂载 3.更新 4.销毁
   创建阶段---响应式数据
      发送初始化渲染请求
   挂载阶段---渲染模板
      操作dom
   更新阶段---数据修改，更新视图
   销毁阶段---销毁实例 -->

   <!-- Vue生命周期函数（钩子函数）
    Vue生命周期函数中，会自动运行一些函数，被称为生命周期钩子，让开发者可以在特定阶段运行自己的代码 -->

    <!-- 总结
     Vue生命周期总结
     四个阶段，八个钩子->三个常用created，mounted，beforeDestroy -->
    <div id="app">
      <h3>{{ title }}</h3>
      <div>
        <button @click="count--">-</button>
        <span>{{ count }}</span>
        <button @click="count++">+</button>
      </div>
    </div>

    <script src="./vue.js"></script>

    <script>
      const app = new Vue({
        el: '#app',
        data: {
          count: 100,
          title: '计数器'
        },
        //1.创建阶段（准备阶段）
        beforeCreate() {
          console.log('beforeCreate 响应式数据准备好之前',this.count)
        },
        created(){
          console.log('created 响应式数据准备好之后')
          //this.数据名=请求回来的数据
          //可以开始发送初始化渲染的请求了
        },
        //2.挂载阶段（渲染模板）
        beforeMount() {
          console.log('beforeMount 模板渲染之前',document.querySelector('h3').innerHTML)
        },
        mounted(){
          console.log('mounted 模板渲染之后',document.querySelector('h3').innerHTML)
          //可以开始操作dom了
        },
        //3.更新阶段（修改数据->更新视图）
        beforeUpdate() {
          console.log('beforeUpdate，数据修改了，视图还没更新',document.querySelector('span'.innerHTML))
        },
        updated() {
          console.log('updated，数据修改了，视图已经更新',document.querySelector('span'.innerHTML))
        },
        //4.卸载阶段
        beforeDestroy() {
          console.log('beforeDestroy，卸载前')
        },
        destroyed() {
          console.log('destroyed，卸载后')
        },
      })
    </script>
</body>
</html>